package com.holly.unit.deform.api;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.holly.unit.db.api.pojo.page.PageResult;
import com.holly.unit.deform.api.pojo.base.DesignFormDTO;
import com.holly.unit.deform.api.pojo.base.DictModelDTO;
import com.holly.unit.deform.api.pojo.base.TranslateDataDTO;
import com.holly.unit.deform.api.pojo.data.DesignFormDataDTO;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 类描述: 表单设计基本信息API
 *
 * @author fxr
 * @version 1.0.0
 * @date 2022/4/2 9:53
 */
public interface DeformBaseInfoApi<T> {


    /***
     * 添加一对多
     * @param designFormDTO
     */
    void saveOneToMany(DesignFormDTO designFormDTO);


    /**
     * 修改一对多
     *
     * @param designFormDTO
     * @param designFormDataList
     */
    void updateOneToMany(DesignFormDTO designFormDTO, List<DesignFormDataDTO> designFormDataList);


    /**
     * 删除一对多
     *
     * @param id
     */
    void delOneToMany(String id);


    /**
     * 批量删除一对多
     *
     * @param idList
     */
    void delBatchOneToMany(Collection<? extends Serializable> idList);

    /**
     * 根据code查询DesignForm
     *
     * @param desformCode 表单编码
     * @return
     */
    DesignFormDTO getByCode(String desformCode);

    /**
     * 根据id查询DesignForm
     *
     * @param id 主键id
     * @return
     */
    DesignFormDTO getById(String id);

    /**
     * 根据id修改实体类信息
     * @param t 实体
     * @return
     */
    void updateById(T t);

    /***
     * 查询出配置项中所有的字典类型
     * @param designFormDTO
     * @return
     */
    DesignFormDTO queryAllDictItem(DesignFormDTO designFormDTO);

    /**
     * 翻译列表
     *
     * @param translateDataDTOList
     * @return
     */
    Map<String, List<DictModelDTO>> translateColumns(List<TranslateDataDTO> translateDataDTOList);

    /***
     * 将模板设置为移动模板，如果之前已有移动模板，就会被取消，并设置新的模板
     * @param parentCode
     * @param desformCode
     * @return
     */
    boolean setMobileView(String parentCode, String desformCode);


    /***
     * 基于查询包装器查询所有数据
     * @param queryWrapper
     * @return
     */
    List<DesignFormDTO> fetchList(QueryWrapper<?> queryWrapper);

    /***
     * 基于查询包装器分页查询列表数据
     * @param queryWrapper
     * @return
     */
    PageResult<DesignFormDTO> pageList(QueryWrapper<?> queryWrapper);

    /***
     * 根据父节点的id查询子节点的数量
     * @param parentId
     * @return
     */
    int fetchChildNodeCount(String parentId);

    /***
     * 判断父节点parentId下是否有子节点
     * @return
     */
    boolean hasChild(String parentId);


    /***
     * 普通同步索引
     * 只更新索引的文档
     * @param rowIds
     */
    void redoAllIndex(String rowIds);

    /***
     * 强制重置所有表单设计器的索引，去快速重置不同的地方是，
     * 强制重置需要先删除所有索引，再重新创建并插入数据，耗时较长，但会清除无效数据
     * @param rowIds
     */
    void redoAllIndexForce(String rowIds);


    boolean checkCode(DesignFormDTO desformCode);
}
